package controller;

import entity.IdUtil;
import entity.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import service.UserService;

import javax.persistence.criteria.CriteriaBuilder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("UserController")
public class UserController extends Uploads{
    @Autowired
    UserService us;

    //根据用户id物理删除或者恢复一个用户,修改删除状态
    @ResponseBody
    @RequestMapping("deleteById")
    public int deleteById(Integer userid,Integer number){
        //number：2是物理删除操作传入要物理删除的userid
        //1是恢复操作传入要恢复的userid
        //3是永久删除
        int i=us.updateDelstatus(userid,number);
        return i;
    }

    //分页查询用户列表 状态当前页和每页数量 搜索用户名关键词
    @ResponseBody
    @RequestMapping("findUser")
    public Map findUser(Integer state,String username,Integer page, Integer count){
      return us.findUser(state,username,page,count);
    }

    //登陆
    @ResponseBody
    @RequestMapping("login")
    public Map login(Users user, HttpSession session){
       // System.out.print(user.getPassword()+"pa");
        //返回实体和状态给前端
        return us.login(user,session);
    }

    //新增或修改用户
    @ResponseBody
    @RequestMapping("addUpdateUser")
    public Integer addUpdateUser(Users user){
        System.out.print(user.getEmail()+"asda");
        System.out.print(user.getPhone()+"asda");
        return us.addUpdateUser(user);
    }

    //新增或修改用户
    @ResponseBody
    @RequestMapping("findUserOne")
    public Users findUserOne(Integer userid){
        return us.findUserOne(userid);
    }


    //注册(终极版)
//    @ResponseBody
//    @RequestMapping("register3")
//    public Integer register3(Users u, HttpServletRequest req, @RequestParam("file")MultipartFile file){
//        try{
//            //返回图片在服务器中的绝对路径
//            String newString=uploads(req,file,"images/user");
//            u.setImg(newString); //加入数据库
//            return us.register(u);
//        }catch (Exception e){//注册失败,用户名重复等异常
//            // e.printStackTrace();
//            return -1;
//        }
//    }


    //单个图片上传
    @ResponseBody
    @RequestMapping("uploadOne")
    public String uploadOne(HttpServletRequest req,@RequestParam("file") MultipartFile file) throws IOException {
        //当前项目名称（push）
        String paths = req.getContextPath();
        //项目访问地址（http://localhost:8080/push）
        String basePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+paths+"/";
        //获取图片上传到服务器文件夹images的路径
        String path=req.getServletContext().getRealPath("/images/step");
        //获取上传文件原名称
        String originalFilename=file.getOriginalFilename();
        //获取文件扩展名 /jpg
        String tName=originalFilename.substring(originalFilename.lastIndexOf("."));
        //用时间轴做图片名称，加一个同步在同一时间提交的文件不会冲突(重复)
        //自定义一个单例模式的工具类(IdUtil)，里面使时间轴同步
        String newName=IdUtil.getIdUtil().getTime()+tName;//图片新名称
        File f1=new File(path+"/"+newName);
        if(!f1.exists()){
            f1.mkdirs();
        }
        file.transferTo(f1);
        //把图片路径返回给前端
        return basePath+"images/step/"+newName;

    }


    //注册(不需要同时上传图片)
//    @ResponseBody
//    @RequestMapping("register2")
//    public Integer register2(Users u, HttpServletRequest req){
//        try {
//            //当前项目名称（push）
//            String paths = req.getContextPath();
//            //项目访问地址（http://localhost:8080/push）
//            String basePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+paths+"/";
//            //加上访问路径，方便前端展示图片(当前项目访问路径+文件存储路径)
//            u.setImg(basePath+u.getImg()); //加入数据库
//            return us.register(u);
//        }catch (Exception e){//注册失败,用户名重复等异常
//            // e.printStackTrace();
//            return -1;
//        }
//    }

    //注册(需要同时上传图片)
//    @ResponseBody
//    @RequestMapping("register")
//    public Integer register(Users u, HttpServletRequest req, @RequestParam("file")MultipartFile file){
//          try {
//              //当前项目名称（push）
//              String paths = req.getContextPath();
//              //项目访问地址（http://localhost:8080/push）
//              String basePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+paths+"/";
//              //System.out.print("basePath:"+basePath);
//
//              //获取图片上传路径
//              String path=req.getServletContext().getRealPath("/images");
//              File f1=new File(path+"/"+file.getOriginalFilename());
//              if(!f1.exists()){
//                  f1.mkdirs();
//              }
//              file.transferTo(f1);
//              //加上访问路径，方便前端展示图片(当前项目访问路径+文件存储路径)
//              u.setImg(basePath+"images"+"/"+file.getOriginalFilename()); //加入数据库
//
//              return us.register(u);
//          }catch (Exception e){//注册失败,用户名重复等异常
//             // e.printStackTrace();
//              return -1;
//          }
//    }




}
